using System;
using System.Web.Security;

namespace Os.WebUI.Models
{
	public class AccountMembershipService : IMembershipService
	{
		private readonly MembershipProvider _provider;
		public int MinPasswordLength
		{
			get
			{
				return this._provider.MinRequiredPasswordLength;
			}
		}
		public AccountMembershipService() : this(null)
		{
		}
		public AccountMembershipService(MembershipProvider provider)
		{
			this._provider = (provider ?? Membership.Provider);
		}
		public bool ValidateUser(string userName, string password)
		{
			if (string.IsNullOrEmpty(userName))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "userName");
			}
			if (string.IsNullOrEmpty(password))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "password");
			}
			return this._provider.ValidateUser(userName, password);
		}
		public MembershipCreateStatus CreateUser(string userName, string password, string email)
		{
			if (string.IsNullOrEmpty(userName))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "userName");
			}
			if (string.IsNullOrEmpty(password))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "password");
			}
			if (string.IsNullOrEmpty(email))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "email");
			}
			MembershipCreateStatus result;
			this._provider.CreateUser(userName, password, email, null, null, true, null, out result);
			return result;
		}
		public bool ChangePassword(string userName, string oldPassword, string newPassword)
		{
			if (string.IsNullOrEmpty(userName))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "userName");
			}
			if (string.IsNullOrEmpty(oldPassword))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "oldPassword");
			}
			if (string.IsNullOrEmpty(newPassword))
			{
				throw new ArgumentException("Preenchimento do campo é Obrigatório.", "newPassword");
			}
			bool result;
			try
			{
				MembershipUser user = this._provider.GetUser(userName, true);
				result = user.ChangePassword(oldPassword, newPassword);
			}
			catch (ArgumentException)
			{
				result = false;
			}
			catch (MembershipPasswordException)
			{
				result = false;
			}
			return result;
		}
	}
}
